package com.shenke.permission.controller;

import com.shenke.permission.constant.RoleConstant;
import com.shenke.permission.service.UserRoleService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/permission")
public class PermissionController {

    @Resource
    private UserRoleService userRoleService;

    /**
     * 绑定默认角色（普通用户）
     * @param userId
     */
    @PostMapping("/bindDefaultRole")
    void bindDefaultRole(@RequestParam Long userId) {
        if (userId == null) {
            log.error("userId为空");
            return;
        }
        boolean res = userRoleService.bindDefaultRole(userId);

    }

    /**
     * 查询用户角色码（返回 role_code）
     * @param userId
     * @return
     */
    @GetMapping("/userRoleCode")
    String getUserRoleCode(@RequestParam Long userId) {
        if (userId == null) {
            log.error("userId为空");
            return RoleConstant.UNDEFINED_CODE;
        }
        return userRoleService.getUserRoleCode(userId);
    }

    /**
     * 超管调用：升级用户为管理员
     * @param userId
     */
    @PutMapping("/upgradeToAdmin")
    void upgradeToAdmin(@RequestParam Long userId) {
        if (userId == null) {
            log.error("userId为空");
            return;
        }
        userRoleService.upgradeToAdmin(userId);
    }

    /**
     * 超管调用：降级用户为普通角色
     * @param userId
     */
    @PutMapping("/downgradeToUser")
    void downgradeToUser(@RequestParam Long userId) {
        if (userId == null) {
            log.error("userId为空");
            return;
        }
        userRoleService.downgradeToUser(userId);
    }

    /**
     * 根据角色码查询用户 id 列表
     * @param roleCode
     * @return
     */
    @GetMapping("/listUserByRoleCode")
    List<Long> listUserByRoleCode(@RequestParam String roleCode) {
        if (roleCode == null) {
            log.error("roleCode为空");
            return null;
        }
        return userRoleService.listUserByRoleCode(roleCode);
    }
}
